package com.longrise.co.ui.home.presenter;

import android.util.Xml;

import com.longrise.co.ui.home.contract.HomeContract;
import com.longrise.co.ui.home.model.CityInfoBean;

import org.xmlpull.v1.XmlPullParser;

import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017/10/26.
 */

public class XmlParserImpl implements HomeContract.IXmlParser {
    @Override
    public List<CityInfoBean> parse(InputStream is) throws Exception {
        List<CityInfoBean> mList = null;
        CityInfoBean bean = null;
        XmlPullParser xpp = Xml.newPullParser();
        xpp.setInput(is,"UTF-8");

        int eventType = xpp.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT){
            switch (eventType) {
                // 判断当前事件是否为文档开始事件
                case XmlPullParser.START_DOCUMENT:
                    mList = new ArrayList<CityInfoBean>(); // 初始化books集合
                    break;
                // 判断当前事件是否为标签元素开始事件
                case XmlPullParser.START_TAG:
                    if (xpp.getName().equals("province")) { // 判断开始标签元素是否是book
                        bean = new CityInfoBean();
                    } else if (xpp.getName().equals("name")) {
                        eventType = xpp.next();//让解析器指向name属性的值
                        // 得到name标签的属性值，并设置beauty的name
                        bean.setName(xpp.getText());
                    } else if (xpp.getName().equals("baseUrl")) { // 判断开始标签元素是否是book
                        eventType = xpp.next();//让解析器指向age属性的值
                        // 得到age标签的属性值，并设置beauty的age
                        bean.setBaseUrl(xpp.getText());
                    }else if (xpp.getName().equals("updateUrl")) { // 判断开始标签元素是否是book
                        eventType = xpp.next();//让解析器指向age属性的值
                        // 得到age标签的属性值，并设置beauty的age
                        bean.setUpdateUrl(xpp.getText());
                    }else if (xpp.getName().equals("log")) { // 判断开始标签元素是否是book
                        eventType = xpp.next();//让解析器指向age属性的值
                        // 得到age标签的属性值，并设置beauty的age
                        bean.setLog(xpp.getText());
                    }else if (xpp.getName().equals("lat")) { // 判断开始标签元素是否是book
                        eventType = xpp.next();//让解析器指向age属性的值
                        // 得到age标签的属性值，并设置beauty的age
                        bean.setLat(xpp.getText());
                    }else if (xpp.getName().equals("areaid")) { // 判断开始标签元素是否是book
                        eventType = xpp.next();//让解析器指向age属性的值
                        // 得到age标签的属性值，并设置beauty的age
                        bean.setAreaid(xpp.getText());
                    }
                    break;

                // 判断当前事件是否为标签元素结束事件
                case XmlPullParser.END_TAG:
                    if (xpp.getName().equals("province")) { // 判断结束标签元素是否是book
                        mList.add(bean); // 将book添加到books集合
                        bean = null;
                    }
                    break;
            }
            // 进入下一个元素并触发相应事件
            eventType = xpp.next();
        }
        return mList;
    }

    public static void close(Closeable closeable) {//只需要把你想要关闭的流传入就可以关闭此流了
        if (null != closeable) {
            try {
                closeable.close();//此接口只有一个关闭流的方法
            } catch (IOException e) {
                System.out.println("关闭流出错了,错误信息---->" + e);
            }
            closeable = null;
        }
    }

    public static XmlParserImpl newInstance(){
        return new XmlParserImpl();
    }
}
